package br.com.imob.dao;

import br.com.imob.modelo.Categoria;

import java.util.List;

public class CategoriaDao extends GenericDao {
	
	public CategoriaDao() {  }
	
	public Integer adicionarCategoria(Categoria categoria) {
		saveOrUpdatePojo(categoria);
		return categoria.getCategoriaId();
	}
	
	public void removerCategoria(Categoria categoria) {
		removerPojo(categoria);
	}

	/* Precisa definir o ID */
	public void atualizarCategoria(Categoria recupera) {
		saveOrUpdatePojo(recupera);
	}
	
//	/**
//	 * Atualiza uma categoria
//	 * @param Object[] objs
//	 */
//	public void atualizarCategoria( Object[]  objs ) {
//		Categoria cat = new Categoria();
//		cat.setValues( objs );
//		atualizarCategoria( cat );
//	}
	
	/**
	 * Atualiza uma categoria
	 * @param String oldCategoria
	 * @param String newCategoria
	 */
	public void atualizarCategoria(String oldCategoria, String newCategoria ) {
		if ( ( !"".equals(oldCategoria) && oldCategoria != null )
				&& ( !"".equals(newCategoria) && newCategoria != null ) ) 
			atualizarCategoria( getCategoriaQNamedCategoria(oldCategoria), new Categoria(newCategoria) );
	}
	
	/* Precisa definir qual atribuito sera a chave a identificar 
	 * a tupla a ser alterada */
	public void atualizarCategoria(Categoria recuperar, Categoria alterar) {
		recuperar = retriveCategoria(recuperar);
		
		if(alterar.getCategoria() != null)
			recuperar.setCategoria(alterar.getCategoria());
		
		saveOrUpdatePojo(recuperar);
	}
	
//	Artificio para Recuperar a Tupla de Categoria
	protected Categoria retriveCategoria(Categoria recuperar) {
		if(recuperar.getCategoriaId() == null)
			return getCategoriaQNamedCategoria(recuperar.getCategoria());
		else 
			return getCategoria(recuperar.getCategoriaId());
	}
	
	
//	Consultas
	public Categoria getCategoria(Integer key) {
		return getPojoByID(Categoria.class, key);
	}
	public Categoria getCategoriaByQuery(String query, Object...params) {
		return getPojoByQry(query, params);
	}
	public Categoria getCategoriaQNamedCategoria(String fltrCategoria) {
		return getPojoByQNamed("Categoria.findByCategoria", fltrCategoria);
	}
	
	public List<Categoria> getCategorias() {
		return (List<Categoria>) getALL(Categoria.class);
	}
	public List<Categoria> getCategoriasQNamedPRX(String fltrCategoria) {
		return getListByQNamedPRX("Categoria.findLikeByCategoria", fltrCategoria);
	}
	public List<Categoria> getCategoriasByQuery(String query, Object...params) {
		return getListByQry(query, params);
	}
	
}